[Docker] 基本語法紀錄


Posted by mike-hsieh on 2024-05-03

介紹 docker

-- docker api 說明
docker --help
docker

-- 版本
docker --version
docker -v

Docker 三寶:

  1. Image(映像檔): 蛋糕模型。
  2. Container(容器): 蛋糕實體。
    2.1 隔離性:一個Image每一次都會產生一個唯一的Container,可一起執行,互不干擾。
    2.2 輕量級:只需包含應用程式、依賴項和套件...等等,啟動和停止速度極快。
    2.3 可移植性:封裝好應用程式、環境變數、套件...等所有需要的元素,只運行這些內容,跟本地環境無關。
    2.4 快速部署:基於輕量級和可移植性。
    2.5 容器生態系統:Docker 提供了一系列工具和服務,可以輕鬆地管理、監控和編排容器們。例如,Docker Compose 可以用於定義和執行多個容器。
    2.6 版本控制:因隔離性,每個Container的ID都不同,所以可以切換版本。
    2.7 容器共享:基於可移植性。
    2.8 持續整合與持續交付(CI/CD):Docker Container(容器)可自動化建置、測試和部署流程,讓部屬變得簡單且自動化,我們可以設定自動將 GitHub 上專案的 main 分支,若有新的進度就自動部署,如此一來可以節省許多部署的時間。

  3. Repository(儲存庫): 蛋糕模型倉庫,儲存Image。

Docker 使用流程:
Dockerfile ---> Image ---> Container

-- 依照image產生container,並運行
docker container run hello-world
docker run hello-world

-- 停止container
docker container stop hello-world
docker stop hello-world

-- 全部容器的 process status
docker ps --all
docker ps

-- 尋找當前目錄中的 .Dockerfile 檔案,並建立為image,名稱為隨機生成的ID
docker build .

-- 尋找當前目錄中的 .Dockerfile 檔案,並建立為image,名稱myapp
docker build --tag myapp .
docker build -t myapp .

-- 列出本地的所有 images
docker images

-- 從遠端 registry (倉庫)下載 image (映像)到本地
docker pull

-- 將本地的 image (映像)上傳到遠端 registry (倉庫)。
docker push

Container

-- 啟動 Ruby Container,但沒有交互式、終端
docker run ruby
docker run ruby:3.2.2

-- Ruby Container已經關閉了
docker ps -a

-- 交互模式:可以進到容器內部互動
docker run -i -t ruby /bin/bash

-- irb 是 Ruby 附帶的交互編程環境 by 石冢敬树
irb

-i:代表 "交互式"(Interactive)。這個指令可以讓你輸入指令。如果沒有使用 -i ,則容器不會接受輸入的指令(就是你怎麼輸入他都不理你)。
-t:代表 "終端"(Terminal)。這個指令是讓 Docker 為容器分配一個虛擬終端幾,讓我們可以在容器內部進行命令操作。如果沒有使用 -t ,你就想像成沒有一個可以打指令的地方(沒有終端機)。
/bin/bash:代表命令解析器(Shell)。用於解釋和執行命令、腳本以及與系統交互的操作。

-- 容器裡停止

  1. 輸入exit -> 按下enter
  2. ctrl + d

-- 背景(持久)模式執行:那在 docker 時,使用 -d 即可在背景執行,不會多佔一個終端機的概念
docker run -d ruby

-- 命名我的 container
docker run --name my_ruby ruby

-- 指令都可以根據狀況組合使用
docker run -it --name ruby_test ruby

-- 開始 Container
docker start

-- 其他終端機停止
docker stop

--刪除 Container (不能刪除運行中的container)
docker rm

Network

Bridge Network (橋接網絡): 每個 Container (容器)都會分配一个獨立、不重複的 IP 地址,而這些 IP 地址是私有的,只能在 Container (容器)內找到,無法跟 Container (容器)外部聯絡。
Host Network(主機網路): 翻譯官本人出國時,因為本來就會當國語言,他就不需要再另外請翻譯,因為他自己就聽得懂。
隱憂: 隔離性和安全性。
None Network(無網路): 無人島,完全隔離並且沒有任何網絡訪問權限。

-- 查看本機 docker 網路列表
docker network ls

-- 查看一個container的所有詳細資訊
docker inspect

-- 建立網路
docker network create

-- 置換 container 的 natwork 為特定 natwork
docker network connect

-- 斷開 Network(網路)與 Container (容器) 的連接
docker network disconnect

-- 移除網路
docker network rm

Image Tag

Tags(標籤)可以包括字母、數字、橫線(-)和下劃線(_),但不建議使用特殊符號(.、:、/等)。

-- 建立自己的 Tags(標籤): 類似定義自己的版本號,
docker tag <本機現有映像 id_or_repository>:<本機現有標籤> <新映像 repository>:<新標籤>
docker tag ruby:latest ruby:v1

-- 依照指定的Image,複製一個新的自定義名稱的Image
docker tag <本機現有映像id_or_repository> <新映像 repository>
docker tag ruby my-ruby

-- 建立+推送(push)自己的 Tags(標籤)
docker tag <本機現有映像id_or_repository> <Docker 儲存庫的主機名或 IP 地址>:<端口>/<新映像 repository>:<新標籤>

1. 就是我們上面介紹的建立新的 Tags(標籤)
2. 還包含了將這個新 Tags(標籤)的 Image(映像),推送到指定的 Docker 儲存庫 (myregistryhost:5000) 中,以便在遠端的主機上使用或與其他人共享。

Docker Image(映像) 的常用語法

-- 拉取 Image(映像)
docker pull 映像名稱:版本

-- 刪除 Image(映像)
docker rmi <映像ID或名稱>
remove image => rmi

-- 建立 Image(映像) 非當前路徑
docker build -t 映像名稱:版本
-t 是 tag 的意思
Dockerfile 正常都會位於當前目錄,所以若是當前目錄我們可以寫成

-- 建立 Image(映像) 當前路徑
docker build -t 映像名稱:版本 .
.就代表當前目錄 ; 需要特別寫路徑,則是因為 Dockerfile 不在當前目錄

-- 將 Image(映像) 推送到註冊表
docker push 映像名稱:版本
這邊的話不特別寫要推到哪個註冊表,就是預設推到 Docker Hub 註冊表

-- 將 Image(映像) 推送到非Docker Hub註冊表
docker push <目標註冊表URL>/圖片名稱:版本
如果有其他註冊表如: Google Container Registry(GCR)或 Amazon Elastic Container Registry(ECR)

-- 查看 Image(映像) 的詳細資料
docker inspect <映像名稱或ID>


#docker #Command







Related Posts

程式導師實驗計畫 Week8 作業與解答

程式導師實驗計畫 Week8 作業與解答

Next.js 入門:使用 next export 輸出 static file

Next.js 入門:使用 next export 輸出 static file

[CSS] 切版眉角的部份

[CSS] 切版眉角的部份


Comments